/**
 * 
 */
package com.ubo.java.model.classifier;

import java.util.Collection;
import java.util.HashSet;
import java.util.Set;


import com.ubo.java.model.EVisibility;
import com.ubo.java.model.PackageModel;
import com.ubo.java.model.comment.Comment;
import com.ubo.java.model.declaration.Attribut;
import com.ubo.java.model.methode.Prototype;
import com.ubo.transform.java.IJavaVisitor;

/**
 * @author saludegu
 * 
 */
public class Interface extends AClassifier {

	/**
	 * Liste des méthodes de l'interface.
	 */
	protected Set<Prototype> mPrototypes;

	/**
	 * Liste des attributs de l'interface.
	 */
	protected Set<Attribut> mAttributs;

	/**
	 * 
	 * Constructor
	 * 
	 */
	public Interface(String interfaceName, PackageModel packageInterface,
			EVisibility visibility) {
		super(interfaceName, packageInterface, visibility);
		mPrototypes = new HashSet<Prototype>(0);
		mAttributs = new HashSet<Attribut>(0);
		mComment = new Comment(new StringBuffer("* Interface " + interfaceName
				+ "\n"));
		mComment.setAuthor();
	}

	/**
	 * Ajout d'une collection de signature au set.
	 * 
	 * @param signatures
	 */
	public void addAllPrototypes(Collection<Prototype> signatures) {
		mPrototypes.addAll(signatures);
	}

	/**
	 * Ajout d'une méthode à l'interface.
	 * 
	 * @param signature
	 */
	public void addMethod(Prototype prototype) {
		mPrototypes.add(prototype);
	}

	/**
	 * Ajout d'une collection d'attributs à l'interface.
	 * 
	 * @param attributs
	 */
	public void addAllAttr(Collection<Attribut> attributs) {
		mAttributs.addAll(attributs);
	}

	/**
	 * Ajout d'un attribut à l'interface.
	 * 
	 * @param attribut
	 */
	public void addAttribut(Attribut attribut) {
		mAttributs.add(attribut);
	}

	/**
	 * @return the mPrototypes
	 */
	public Set<Prototype> getPrototypes() {
		return mPrototypes;
	}

	/**
	 * @return the mAttributs
	 */
	public Set<Attribut> getAttributs() {
		return mAttributs;
	}

	/**
	 * @see com.ubo.transform.java.IJavaGenerable#generate(com.ubo.transform.java.IJavaVisitor)
	 */
	@Override
	public void generate(IJavaVisitor<?> generator) {
		generator.generate(this);
	}

	public void extendsClassifier(Interface classifier) {
		classifier.implementsInterfaces(this);
	}

	public void implementsClassifier(Interface classifier) {
		classifier.implementsInterfaces(this);
	}
	
	public void extendsClassifier(ClassModel classifier) {
	}
	
	public void implementsClassifier(ClassModel classifier) {
		classifier.implementsInterfaces(this);
	}
	
	
	@Override
	public void extendsClassifier(IClassifier classifier) {
		classifier.extendsClassifier(this);
	}

	@Override
	public void implementsClassifier(IClassifier classifier) {
		classifier.implementsClassifier(this);
	}

}
